/**
 * 
 */
package ec.com.avila.emision.web.backings;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

import ec.com.avila.emision.web.beans.PolizaBean;
import ec.com.avila.hiperion.entities.Financiamiento;
import ec.com.avila.hiperion.entities.PagoPoliza;
import ec.com.avila.hiperion.entities.Poliza;
import ec.com.avila.hiperion.entities.TarjetaCredito;
import ec.com.avila.hiperion.servicio.PolizaService;

/**
 * <b> Clase que sirve de soporte para un objeto manejado dentro de la aplicación se  codifican los comportamientos
 * específicos asociados a cada control del Managed Bean representado por la página</b>
 * 
 * @author Paul Jimenez
 * @version 1.0,Dec 18, 2013
 * @since JDK1.6
 */
@ManagedBean
@ViewScoped
public class PolizaBacking {

	@ManagedProperty(value = "#{polizaBean}")
	private PolizaBean polizaBean;

	@EJB
	private PolizaService polizaService;

	public void setearPoliza() {

		Poliza poliza = new Poliza();

		poliza.setNumeroPoliza(new BigDecimal(polizaBean.getNumeroPoliza()));
		poliza.setRamo(polizaBean.getRamo());
		poliza.setNumeroAnexo(polizaBean.getNumeroAnexo());
		poliza.setEjecutivo(polizaBean.getEjecutivo());
		poliza.setVigenciaDesde(polizaBean.getVigenciaDesde());
		poliza.setHoraDesde(polizaBean.getHoraDesde());
		poliza.setVigenciaHasta(polizaBean.getVigenciaHasta());
		poliza.setHoraHasta(polizaBean.getHoraHasta());
		poliza.setDiasCobertura(new BigDecimal(polizaBean.getDiasCobertura()));
		poliza.setSumaAsegurada(new BigDecimal(polizaBean.getSumaAsegurada()));
		poliza.setPrimaNeta(new BigDecimal(polizaBean.getPrimaNeta()));
		poliza.setSuperBanSeguros(polizaBean.getSuperBanSeguros());
		poliza.setSeguroCampesino(new BigDecimal(polizaBean.getSeguroCampesino()));
		poliza.setDerechoEmision(new BigDecimal(polizaBean.getDerechoEmision()));

		PagoPoliza pagoPoliza = setearPagoPoliza(poliza);
		
		poliza.setPagoPoliza(pagoPoliza);

		

	}

	/**
	 * <b> Incluir aqui­ la descripcion del metodo. </b>
	 * <p>
	 * [Author: kruger, Date: Dec 20, 2013]
	 * </p>
	 * 
	 * @param poliza
	 * @return
	 */
	private PagoPoliza setearPagoPoliza(Poliza poliza) {
		PagoPoliza pagoPoliza = new PagoPoliza();

		pagoPoliza.setNumeroFactura(polizaBean.getNumeroFactura());
		pagoPoliza.setSubtotal(polizaBean.getSubtotal());
		pagoPoliza.setAdicionalSegCampesino(polizaBean.getAdicionalSegCampesino());
		pagoPoliza.setIva(polizaBean.getIva());
		pagoPoliza.setTotal(polizaBean.getTotal());
		pagoPoliza.setFormaPago(polizaBean.getFormaPago());
		pagoPoliza.setCuotaInicial(polizaBean.getCuotaInicial());

		poliza.setPagoPoliza(pagoPoliza);

		setearTarjetaCredito(pagoPoliza);
		
		List<Financiamiento> financiamientos = setearFinanciamientos();
				
		pagoPoliza.setFinanciamientos(financiamientos);
		
		return pagoPoliza;
	}

	/**
	 * <b>
	 * Incluir aqui­ la descripcion del metodo.
	 * </b>
	 * <p>[Author: kruger, Date: Dec 20, 2013]</p>
	 *
	 * @return
	 */ 
	private List<Financiamiento> setearFinanciamientos() {
		List<Financiamiento> financiamientos = new ArrayList<Financiamiento>();
		
		for (Financiamiento financiamiento : financiamientos) {
			financiamiento.setNumeroCuota(polizaBean.getNumeroCuota());
			financiamiento.setValor(polizaBean.getValor());
			financiamiento.setFechaVencimiento(polizaBean.getFechaVencimiento());
			
			financiamientos.add(financiamiento);
		}
		return financiamientos;
	}

	/**
	 * <b> Incluir aqui­ la descripcion del metodo. </b>
	 * <p>
	 * [Author: kruger, Date: Dec 20, 2013]
	 * </p>
	 * 
	 * @param pagoPoliza
	 */
	private void setearTarjetaCredito(PagoPoliza pagoPoliza) {
		TarjetaCredito tarjeta = new TarjetaCredito();

		tarjeta.setTarjeta(polizaBean.getTarjeta());
		tarjeta.setTipoPago(polizaBean.getTipoPago());
		tarjeta.setNumeroMeses(polizaBean.getNumeroMeses());
		tarjeta.setValor(polizaBean.getValorPago());

		pagoPoliza.setTarjetaCredito(tarjeta);
	}

	public void guardarPoliza(Poliza poliza) {
		polizaService.guardarPoliza(poliza);
	}
}
